<?php

namespace app\index\controller;

use think\Controller;
use think\Db;
use think\Request;
use think\Session;
use Myredis\Myredis;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
use app\index\controller\Upfile;
use phpemail\Email;
class Personal extends Indexcontroller
{

    /**
     * 加载编辑页面
     * @return \think\response\View|void
     */
    public function edit()
    {
        $id = Request::instance()->session('uid');
        $res = Db::table('xo_user')->field('pwd', true)->find($id);
        if ($res) {
            return view('edit', [
                'data' => $res
            ]);
        } else {
            return $this->error('加载失败');
        }
    }

    /**
     * 处理编辑
     */
    public function doEdit()
    {
        if (!Request::instance()->isPost()) {
            return $this->error('小伙子迷了路', url('index/index/index'));
        };
        //接受数据
        $myfile = $_FILES['myfile'];
        if(!empty($myfile['name'])){
            $file = $this->up();
            $nickname = Request::instance()->post('nickname');
            $sex = Request::instance()->post('sex');
            $sign = Request::instance()->post('sign');
            $qq = Request::instance()->post('qq');
            $id = Session::get('uid');
            //处理数据
            $data = [
                'icon' => $file,
                'nickname' => $nickname,
                'sex' => $sex,
                'sign' => $sign,
                'qq' => $qq
            ];
        }else{
            $nickname = Request::instance()->post('nickname');
            $sex = Request::instance()->post('sex');
            $sign = Request::instance()->post('sign');
            $qq = Request::instance()->post('qq');
            $id = Session::get('uid');
            //处理数据
            $data = [
                'nickname' => $nickname,
                'sex' => $sex,
                'sign' => $sign,
                'qq' => $qq
            ];
        }

        $res = Db::table('xo_user')->where('id', $id)->update($data);
            if ($res) {
                return $this->success('编辑成功', url('index/personal/edit'));
            } else {
                return $this->error('编辑失败');
            }
        }



    /**
     * 加载实名认证页面
     * @return \think\response\View|void
     */
    public function idcard()
    {
        // echo 1;die;
        return view('personal/idcard');

    }

    /**
     * 加载实名认证页面
     * @return \think\response\View|void
     */
    public function upidcard()
    {
        if (!Request::instance()->isPost()) {
            return $this->error('小伙子迷了路', url('index/index/index'));
        };
        $file = $this->upcard();
        header("Content-type:text/html;charset=utf-8");
        $config = array(
          'key' => '001110ae7013605943efc01a307b1b93',
          'url' => 'http://v.juhe.cn/certificates/query.php', //聚合数据证件识别接口  的URL地址
          'cardType' => '2', //证件的类型
          'type' => 'image/jpg', //证件图片的类型
        );
         
        /*第一种方式*/
        $ch = curl_init($config['url']);
        $cfile = curl_file_create('./static/Upload/'.$file, $config['type'], $file);
        $data = array(
          'cardType' => $config['cardType'],
          'key' => $config['key'],
          'pic' => $cfile,
        );
        curl_setopt($ch, CURLOPT_POST,1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $res = curl_exec($ch);
        curl_close($ch);
        $res =json_decode($res,true);
        if ($res['reason']!=='操作成功') {
            return $this->error('认证身份证失败~亲~请重试');
        }

        // var_dump($res);
        $name = $res['result']['姓名'];
        $birthday = substr($res['result']['出生'],5,5);
        $idcard = $res['result']['公民身份号码'];
        $uid = Session::get('uid');
        $da['birthday']=$birthday;
        $da['true_name']=$name;
        $da['id_number']=$idcard;
        $result = Db::table('xo_user')->where('id',$uid)->update($da);
        if ($result) {
            return $this->success('认证身份证成功');
        }else{
            return $this->error('认证身份证失败');
        }
    }

    /**
     * 处理邮箱验证码的发送
     * @return array
     */
    public function emailCode()
    {
        $to = Request::instance()->post('email');
        $rules = '/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/';
        if(preg_match($rules,$to)){
            $code = mt_rand('1000','9999');
             $email =  new Email();
             $res =$email->sendemail($to,$code);
            Myredis::setex($to.'emailCode',300,$code);
            $data = [
                'status'=>true,
                'info'=>'邮件发送成功'
            ];
        }else{
            $data = [
                'status' => false,
                'info' => '邮件发送失败'
            ];
        }
        return json($data);

    }

    /**
     * 处理邮箱编辑
     * @return \think\response\Json
     */
    public function doEmail()
    {

        $emailCode = Request::instance()->post('emailCode');
        $email = Request::instance()->post('email');
        $code = Myredis::get($email.'emailCode');
        if($emailCode!=$code){
            $data = [
                'status'=>false
            ];
        }else{
            $id = Request::instance()->session('uid');
            $res = Db::table('xo_user')->where('id',$id)->update(['email'=>$email]);
            if($res){
                $data = [
                    'status'=>true,
                ];
            }else{
                $data = [
                    'status'=>false
                ];
            }
        }
        return json($data);
    }

    /**处理手机编辑
     * @return \think\response\Json
     */
    public function doPhone()
    {
        $telCode = Request::instance()->post('telCode');
        $tel = Request::instance()->post('tel');
        $code = Myredis::get($tel.'telCode');
        if($telCode!=$code){
            $data = [
                'status'=>false
            ];
        }else{
            $id = Request::instance()->session('uid');
            $res = Db::table('xo_user')->where('id',$id)->update(['tel'=>$tel]);
            if($res){
                $data = [
                    'status'=>true,
                ];
            }else{
                $data = [
                    'status'=>false
                ];
            }
        }
        return json($data);
        }

    function up($myfile = 'myfile', $size = 10485760, $type = ['image', 'text'], $dir = './uploads/')
    {
        //开启事务
        Db::startTrans();
        // 进行相关的业务逻辑操作
        if (empty($_FILES)) {
            return $this->error('可能设置错误<br> 请检查表单设置 或 php.ini的post设置');
        }
//        var_dump($myfile);die;
        // 获取上传信息
        $fileError = $_FILES[$myfile]['error'];
        $fileSize = $_FILES[$myfile]['size'];
        $fileType = $_FILES[$myfile]['type'];
        $fileName = $_FILES[$myfile]['name'];
        $fileTmp = $_FILES[$myfile]['tmp_name'];

        // 判断是否错误发生
        if ($fileError > 0) {
            // 提示信息
            echo '文件上传出错<br>';

            // 错误信息提示
            switch ($fileError) {
                case 1:
                    echo '上传的文件 超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项限制的';
                    break;
                case 3:
                    echo '文件只有一部分被上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
            }

            // 一旦出错,再次中止
            return $this->error('即将跳转到上一层');
        }

        // 自由限制文件大小   上传文件的大小 > 调用大小值
        if ($fileSize > $size) {
            return $this->error('文件超过限制大小');
        }

        // 做文件类型的限制
        // 先的到上传文件的主类型
        // print_r(explode('/',  $fileType));
        list($mainType) = explode('/', $fileType);

        // echo $mainType;

        // 在调用的类型列表之中 搜索类型,进行匹配
        if (!in_array($mainType, $type)) {
            return $this->error('文件类型不合法');;
        }

        // 生成保存的文件
        // 先获取源文件的后缀
        $ext = pathinfo($fileName, PATHINFO_EXTENSION);
        // var_dump($ext);

        // 生成新的文件名: 时间+唯一ID+后缀
        $saveName = date('Ymd') . uniqid() . '.' . $ext;
        // echo $saveName;

        // 保存路径
        // echo date('Y/m/d');
        $savePath = './static/Upload/' . date('Y/m/d/');
        // echo $savePath;
        // 检测目录是否存在,不存在则建之
        if (!file_exists($savePath)) {
            mkdir($savePath, 0777, true);
        }
        // 拼接路径 +  文件名
        $saveFile = $savePath . $saveName;
        // 移动文件
        if (move_uploaded_file($fileTmp, $saveFile)) {
            // 提交事务
            //            foreach ($upInfo as $ks => $vs) {
            // 上传7牛云
            // 需要填写你的 Access Key 和 Secret Key
            $accessKey = "N3GnH7a9EyWyUMRdA2wlvUTgwqQjEldvqP_ODRDv";// 7牛云的 Access Key
            $secretKey = "Ea7tLc1QI1AeN3pKV5ZTWNzqwNgH0zepNAF0xl5L";//7牛云的 Secret Key
            $bucket = "yuntu";    ////7牛云的 bucket 库名
            // 构建鉴权对象
            $auth = new Auth($accessKey, $secretKey);
            // 生成上传 Token
            $token = $auth->uploadToken($bucket);
            // 要上传文件的本地路径
            $filePath = './static/Upload/' . date('Y/m/d/') .$saveName;
            // 上传到七牛后保存的文件名
//                var_dump($savename);die;
            $key = $saveName;
            // 初始化 UploadManager 对象并进行文件的上传。
            $uploadMgr = new UploadManager();
            // 调用 UploadManager 的 putFile 方法进行文件的上传。
            list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
//                echo "\n====> putFile result: \n";
            if ($err !== null) {
                var_dump($err);
            } else {
            }
            //上传成功删除本地文件
            unlink($filePath);
            // $ret 返回2个参数  hash 和 key    key对应的是图片的名字(即下载地址[key])
//            得到第一个.的位置
//                $p['icon'] = $saveName;
//
//                // 将上传到7牛云的图片地址存入数据库中
//                $res = Db::table('xo_user')->where('id',$id)->update($p);
//                var_dump($res);die;
            Db::commit();
            return $saveName;
        } else {
            // 事务回滚
            Db::rollback();
        }
    }





    function upcard($myfile = 'myfile', $size = 10485760, $type = ['image', 'text'], $dir = './uploads/')
    {
        //开启事务
        Db::startTrans();
        // 进行相关的业务逻辑操作
        if (empty($_FILES)) {
            return $this->error('可能设置错误<br> 请检查表单设置 或 php.ini的post设置');
        }
        // 获取上传信息
        $fileError = $_FILES[$myfile]['error'];
        $fileSize = $_FILES[$myfile]['size'];
        $fileType = $_FILES[$myfile]['type'];
        $fileName = $_FILES[$myfile]['name'];
        $fileTmp = $_FILES[$myfile]['tmp_name'];

        // 判断是否错误发生
        if ($fileError > 0) {
            // 提示信息
            echo '文件上传出错<br>';

            // 错误信息提示
            switch ($fileError) {
                case 1:
                    echo '上传的文件 超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项限制的';
                    break;
                case 3:
                    echo '文件只有一部分被上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
            }

            // 一旦出错,再次中止
            return $this->error('即将跳转到上一层');
        }

        // 自由限制文件大小   上传文件的大小 > 调用大小值
        if ($fileSize > $size) {
            return $this->error('文件超过限制大小');
        }

        // 做文件类型的限制
        // 先的到上传文件的主类型
        // print_r(explode('/',  $fileType));
        list($mainType) = explode('/', $fileType);

        // echo $mainType;

        // 在调用的类型列表之中 搜索类型,进行匹配
        if (!in_array($mainType, $type)) {
            return $this->error('文件类型不合法');;
        }

        // 生成保存的文件
        // 先获取源文件的后缀
        $ext = pathinfo($fileName, PATHINFO_EXTENSION);
        // var_dump($ext);

        // 生成新的文件名: 时间+唯一ID+后缀
        $saveName = date('Ymd') . uniqid() . '.' . $ext;
        // echo $saveName;

        // 保存路径
        // echo date('Y/m/d');
        $savePath = './static/Upload/';
        // echo $savePath;
        // 检测目录是否存在,不存在则建之
        if (!file_exists($savePath)) {
            mkdir($savePath, 0777, true);
        }
        // 拼接路径 +  文件名
        $saveFile = $savePath . $saveName;
        // 移动文件
        if (move_uploaded_file($fileTmp, $saveFile)) {
            // 提交事务
            //            foreach ($upInfo as $ks => $vs) {
            // 上传7牛云
            // 需要填写你的 Access Key 和 Secret Key
            $accessKey = "N3GnH7a9EyWyUMRdA2wlvUTgwqQjEldvqP_ODRDv";// 7牛云的 Access Key
            $secretKey = "Ea7tLc1QI1AeN3pKV5ZTWNzqwNgH0zepNAF0xl5L";//7牛云的 Secret Key
            $bucket = "yuntu";    ////7牛云的 bucket 库名
            // 构建鉴权对象
            $auth = new Auth($accessKey, $secretKey);
            // 生成上传 Token
            $token = $auth->uploadToken($bucket);
            // 要上传文件的本地路径
            $filePath = './static/Upload/'.$saveName;
            // 上传到七牛后保存的文件名
//                var_dump($savename);die;
            $key = $saveName;
            // 初始化 UploadManager 对象并进行文件的上传。
            $uploadMgr = new UploadManager();
            // 调用 UploadManager 的 putFile 方法进行文件的上传。
            list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
//                echo "\n====> putFile result: \n";
            if ($err !== null) {
                var_dump($err);
            } else {
            }
            //上传成功删除本地文件
            // unlink($filePath);
            // $ret 返回2个参数  hash 和 key    key对应的是图片的名字(即下载地址[key])
//            得到第一个.的位置
//                $p['icon'] = $saveName;
//
//                // 将上传到7牛云的图片地址存入数据库中
//                $res = Db::table('xo_user')->where('id',$id)->update($p);
//                var_dump($res);die;
            Db::commit();
            return $saveName;
        } else {
            // 事务回滚
            Db::rollback();
        }
    }

    }
